package signals;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

public abstract class Signal implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	/**
	 * Transforme l'objet signal en un tableau d'octet.
	 * 
	 * @return Un tableau d'octet correspondant à l'objet, null si une erreur est survenue
	 */
	public byte[] serialize () {
		ByteArrayOutputStream bos = new ByteArrayOutputStream() ;
		ObjectOutputStream oos;
		try {
			oos = new ObjectOutputStream(bos);
			oos.writeObject(this) ;
		} 
		catch (IOException e) {
			e.printStackTrace();
			return null ;
		}
		return bos.toByteArray() ;
	}
	
	/**
	 * Transformes un tableau d'octets en un signal.
	 * 
	 * @param bytes Le tableau d'octet
	 * @param length Le nombre d'octet à utiliser
	 * @return Le signal trouvé, null si une erreur est survenue
	 */
	public static Signal deserialize (byte[] bytes, int length) {
		Signal res = null ;
		try {
			ObjectInputStream ob = new ObjectInputStream(new ByteArrayInputStream(bytes, 0, length));
			res = (Signal)ob.readObject() ;
		}
		catch (IOException e) {
			e.printStackTrace();
			return null ;
		} 
		catch (ClassNotFoundException e) {
			e.printStackTrace();
			return null ;
		}
		return res ;
	}
	
}
